.\" -mdoc is a groff macro package supporting logical formatting. The author
.\" of this example considers it the best package available in groff for
.\" writing manual pages. If you're used to the traditional Unix -man
.\" macros, give this a try; it doesn't take long to learn. groff_mdoc(7) is
.\" a complete reference manual.
.\"
.\" Many of the macros below stack, so ".Op Ar foo" means an optional
.\" argument called "foo", while ".Ar foo" means an argument called "foo".
.\" Where you see things like ".Ql .Fl" below, the second dot causes ".Fl"
.\" to be interpreted as ordinary text rather than calling the .Fl macro.
.Dd June 4, 2005
.Os FooOS
.Dt FOO 1
.Sh NAME
.Nm foo
.Nd program to do something
.Sh SYNOPSIS
A short usage summary.
.Pp
.Nm
.Brq Cm this | Cm that
.Op Fl flags
.Op Fl o Ar option
.Ar argument
.\" Punctuation is treated specially by -mdoc, and often gets pushed up
.\" against whatever precedes it without the special formatting, so having
.\" an underlined argument immediately followed by a normal comma is easy.
.\" If you want to make sure this special handling isn't applied, put a
.\" zero-width space, \&, before the punctuation.
.Op Ar more \&...
.Sh DESCRIPTION
.\" Putting a newline after each sentence generates better output.
Long drawn-out discussion of the program.
It's a good idea to break this up into subsections using the
.Ql .Ss
macro, like these:
.Ss A Sample Subsection
.Ss Yet Another Sample Subsection
.Pp
References to the
.Xr foo SECTION
(or other) manual page should use the
.Ql .Xr
macro as here.
References to the
.Sx OPTIONS
(or other) section within this manual page should use the
.Ql .Sx
macro as here.
.Pp
Use the
.Ql .Pp
macro to start a new paragraph within a section.
.Sh OPTIONS
Some people make this separate from the description.
The following list style is typically used to document options:
.Bl -tag -width 4n
.It Cm this | Cm that
The user MUST specify either
.Cm this
or
.Cm that
to run the program.
The { and } braces (using the
.Ql .Brq
macro) mean one of the enclosed is required.
The bar (|) separates exclusive options (i.e. you cannot have both at once).
.It Fl o
Pass the user-supplied
.Ar option
to
.Nm
to change its behaviour.
The fact that
.Ar option
is underlined or in italics means that the user replaces it with a valid
value for this option.
The [ and ] brackets (using the
.Ql .Op
macro) mean it isn't required.
.Pp
Use the
.Ql .Fl
macro to render dashes in command-line option.
.It Ar argument
The last
.Ar argument
is required, because it is not in brackets.
.It Ar more
means that the user can optionally specify additional arguments at the end.
The ellipses
.Pf ( Ar ... )
indicate one or more of this parameter is allowed.
.\" Remember to close lists you open with .Bl.
.El
.Sh RETURN VALUE
What the program or function returns if successful.
.Sh ERRORS
Return codes, either exit status or errno settings.
.Sh EXAMPLES
Give some example uses of the program.
.Sh ENVIRONMENT
Environment variables this program might care about.
.Sh FILES
All files used by the program.
Typical usage is like this:
.Pp
.Bl -tag -width "/usr/man/man*/*.*" -compact
.It Pa /usr/man
default man tree
.It Pa /usr/man/man*/*.*
unformatted (nroff source) man pages
.El
.Sh NOTES
Miscellaneous commentary.
.Sh CAVEATS
Things to take special care with, sometimes called WARNINGS.
.Sh DIAGNOSTICS
All the possible error messages the program can print out,
what they mean, and how to correct them if applicable.
.Sh BUGS
Things that are broken or just don't work quite right.
.Sh RESTRICTIONS
Bugs you don't plan to fix. :-)
.Sh AUTHOR
Who wrote it (or AUTHORS if multiple).
.Sh HISTORY
Programs derived from other sources sometimes have this.
.Sh SEE ALSO
Other man pages to check out, like
.Xr man 1 ,
.Xr man 7 ,
.Xr mandb 8 ,
.Xr catman 8 .
